package com.joinlink.omiis.commons.persistence.api;

import java.util.List;
import java.util.Map;

/**
 * 全媒体-持久化-API {@link com.joinlink.omiis.commons.persistence.test.DBTest}
 * 
 * @author zhuozhilian
 *
 *
 * @param <T>
 */
/**
 * @author zhuozhilian
 *
 * @param <T>
 */
public interface IDBProcessor<T> {

	/**
	 * 支持动态sql 将查询结果转换为List<Map<String,Object>>
	 * 
	 * @param sql
	 * @param params
	 * @return
	 * @throws Exception
	 */
	List<Map<String, Object>> query(String sql, Object... params) throws Exception;

	/**
	 * 将查询结果转换为具体Bean实体
	 * 
	 * @return
	 * @throws Exception
	 */
	List<T> query2(String sql, Class<T> type, Object... params) throws Exception;

	/**
	 * 更新操作，支持动态参数传入
	 * 
	 * @param sql
	 * @param params
	 * @return
	 * @throws Exception
	 */
	int update(String sql, Object... params) throws Exception;

	/**
	 * 删除操作，支持动态参数
	 * 
	 * @param sql
	 * @param params
	 * @return
	 * @throws Exception
	 */
	int delete(String sql, Object... params) throws Exception;

	/**
	 * 插入操作，支持动态参数
	 * 
	 * @param sql
	 * @param params
	 * @return
	 * @throws Exception
	 */
	int insert(String sql, Object... params) throws Exception;

	
	/**
	 * @param tableNme
	 * @param bean
	 * @return
	 * @throws Exception
	 */
	int insert(String tableName, T bean) throws Exception;

	
	/**
	 * @param bean 默认按照bean的类名作为表明
	 * @return
	 * @throws Exception
	 */
	int insert(T bean) throws Exception;

	/**
	 * 批量操作，支持动态参数 二维数组
	 * 
	 * @param sql
	 * @param params
	 * @return
	 * @throws Exception
	 */
	int batch(String sql, Object[][] params) throws Exception;

}
